--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 7f83b1cab23b517e470e654558c0065964a2fa4d
Parents : 88193cc
Author : Ivan <ivan@quad4.io>
Signature : Invalid signer <e46112d44649266d71fe2193e00a4710>, author is <ivan@quad4.io>
Date : 2026-06-16T18:50:01-05:00
feat(maintenance): add API endpoint and frontend functionality to clear path table, including localization support
Changes
12 files changed, 71 insertions(+), 0 deletions(-)
Diff
diff --git a/meshchatx/meshchat.py b/meshchatx/meshchat.py
index 18720321..09c82de7 100644
--- a/meshchatx/meshchat.py
+++ b/meshchatx/meshchat.py
@@ -7009,6 +7009,16 @@ class ReticulumMeshChat:
n = self.database.gifs.delete_all_for_identity(identity_hash)
return web.json_response({"message": "GIFs cleared", "deleted": n})
+ @routes.delete("/api/v1/maintenance/path-table")
+ async def maintenance_clear_path_table(request):
+ try:
+ dropped = self.rnpath_handler.drop_all_paths()
+ return web.json_response(
+ {"message": "Path table cleared", "dropped": dropped},
+ )
+ except Exception as e:
+ return web.json_response({"message": str(e)}, status=500)
+
# maintenance - export messages
@routes.get("/api/v1/maintenance/messages/export")
async def maintenance_export_messages(request):
diff --git a/meshchatx/src/frontend/components/settings/SettingsPage.vue b/meshchatx/src/frontend/components/settings/SettingsPage.vue
index 0b1e30fe..3535e01f 100644
--- a/meshchatx/src/frontend/components/settings/SettingsPage.vue
+++ b/meshchatx/src/frontend/components/settings/SettingsPage.vue
@@ -547,6 +547,22 @@
</div>
</div>
</button>
+
+ <button
+ type="button"
+ class="btn-maintenance border-teal-200 dark:border-teal-900/30 text-teal-800 dark:text-teal-300 bg-teal-50 dark:bg-teal-900/10 hover:bg-teal-100 dark:hover:bg-teal-900/20"
+ @click="clearPathTable"
+ >
+ <div class="flex flex-col items-start text-left">
+ <div class="font-bold flex items-center gap-2">
+ <MaterialDesignIcon icon-name="map-marker-remove" class="size-4" />
+ {{ $t("maintenance.clear_path_table") }}
+ </div>
+ <div class="text-xs opacity-80">
+ {{ $t("maintenance.clear_path_table_desc") }}
+ </div>
+ </div>
+ </button>
</div>
<div class="space-y-2 pt-2 border-t border-gray-100 dark:border-zinc-800">
@@ -2910,6 +2926,8 @@ export default {
"maintenance.clear_archives_desc",
"maintenance.clear_reticulum_docs",
"maintenance.clear_reticulum_docs_desc",
+ "maintenance.clear_path_table",
+ "maintenance.clear_path_table_desc",
"maintenance.export_messages",
"maintenance.export_messages_desc",
"maintenance.import_messages",
@@ -4280,6 +4298,15 @@ export default {
ToastUtils.error(this.$t("common.error"));
}
},
+ async clearPathTable() {
+ if (!(await DialogUtils.confirm(this.$t("maintenance.clear_confirm")))) return;
+ try {
+ await maintenanceClient.clearPathTable(window.api);
+ ToastUtils.success(this.$t("maintenance.path_table_cleared"));
+ } catch {
+ ToastUtils.error(this.$t("common.error"));
+ }
+ },
async exportMessages() {
try {
const response = await window.api.get("/api/v1/maintenance/messages/export");
diff --git a/meshchatx/src/frontend/js/settings/settingsMaintenanceClient.js b/meshchatx/src/frontend/js/settings/settingsMaintenanceClient.js
index b5c5cb44..d84badf5 100644
--- a/meshchatx/src/frontend/js/settings/settingsMaintenanceClient.js
+++ b/meshchatx/src/frontend/js/settings/settingsMaintenanceClient.js
@@ -60,6 +60,13 @@ export async function clearReticulumDocs(api) {
await api.delete("/api/v1/maintenance/docs/reticulum");
}
+/**
+ * @param {{ delete: (path: string) => Promise<{ data?: { dropped?: number } }> }} api
+ */
+export async function clearPathTable(api) {
+ return api.delete("/api/v1/maintenance/path-table");
+}
+
/**
* @param {{ post: (path: string) => Promise<unknown> }} api
*/
diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index ec43ad6e..06729972 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -642,6 +642,9 @@
"clear_archives_desc": "Alle zwischengespeicherten NomadNetwork-Seiten löschen.",
"clear_reticulum_docs": "Reticulum-Dokumentation löschen",
"clear_reticulum_docs_desc": "Entfernt alle heruntergeladenen Reticulum-Dokumentationen und Versionen.",
+ "clear_path_table": "Pfadtabelle leeren",
+ "clear_path_table_desc": "Entfernt alle zwischengespeicherten Reticulum-Transportpfade. Routen werden bei Bedarf neu entdeckt.",
+ "path_table_cleared": "Pfadtabelle geleert",
"export_messages": "Nachrichten exportieren",
"export_messages_desc": "Alle Konversationen als JSON-Datei herunterladen.",
"import_messages": "Nachrichten importieren",
diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json
index a78fa7b7..30ae3869 100644
--- a/meshchatx/src/frontend/locales/en.json
+++ b/meshchatx/src/frontend/locales/en.json
@@ -642,6 +642,9 @@
"clear_archives_desc": "Delete all cached NomadNetwork pages.",
"clear_reticulum_docs": "Clear Reticulum Docs",
"clear_reticulum_docs_desc": "Removes all downloaded Reticulum documentation and versions.",
+ "clear_path_table": "Clear Path Table",
+ "clear_path_table_desc": "Drop all cached Reticulum transport paths. Routes will be re-discovered as needed.",
+ "path_table_cleared": "Path table cleared",
"export_messages": "Export Messages",
"export_messages_desc": "Download all conversations as a JSON file.",
"import_messages": "Import Messages",
diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index 33b42927..4d889d59 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -642,6 +642,9 @@
"clear_archives_desc": "Eliminar todas las páginas de NomadNetwork caché.",
"clear_reticulum_docs": "Clear Reticulum Docs",
"clear_reticulum_docs_desc": "Elimina todos los documentos y versiones de Reticulum descargados.",
+ "clear_path_table": "Borrar tabla de rutas",
+ "clear_path_table_desc": "Elimina todas las rutas de transporte Reticulum en caché. Las rutas se redescubrirán según sea necesario.",
+ "path_table_cleared": "Tabla de rutas borrada",
"export_messages": "Mensajes de exportación",
"export_messages_desc": "Descargue todas las conversaciones como archivo JSON.",
"import_messages": "Importar mensajes",
diff --git a/meshchatx/src/frontend/locales/fi.json b/meshchatx/src/frontend/locales/fi.json
index b76e5d35..9009ecf1 100644
--- a/meshchatx/src/frontend/locales/fi.json
+++ b/meshchatx/src/frontend/locales/fi.json
@@ -642,6 +642,9 @@
"clear_archives_desc": "Delete all cached NomadNetwork pages.",
"clear_reticulum_docs": "Clear Reticulum Docs",
"clear_reticulum_docs_desc": "Removes all downloaded Reticulum documentation and versions.",
+ "clear_path_table": "Clear Path Table",
+ "clear_path_table_desc": "Drop all cached Reticulum transport paths. Routes will be re-discovered as needed.",
+ "path_table_cleared": "Path table cleared",
"export_messages": "Export Messages",
"export_messages_desc": "Download all conversations as a JSON file.",
"import_messages": "Import Messages",
diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index 845d5d89..34a8d861 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -642,6 +642,9 @@
"clear_archives_desc": "Supprimer toutes les pages de NomadNetwork mises en cache.",
"clear_reticulum_docs": "Effacer les Docs Reticulum",
"clear_reticulum_docs_desc": "Supprime toute documentation et versions téléchargées Reticulum.",
+ "clear_path_table": "Effacer la table de chemins",
+ "clear_path_table_desc": "Supprime tous les chemins de transport Reticulum en cache. Les routes seront redécouvertes au besoin.",
+ "path_table_cleared": "Table de chemins effacée",
"export_messages": "Exporter des messages",
"export_messages_desc": "Télécharger toutes les conversations sous forme de fichier JSON.",
"import_messages": "Importer des messages",
diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index 296c436c..468de85c 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -642,6 +642,9 @@
"clear_archives_desc": "Elimina tutte le pagine NomadNetwork memorizzate.",
"clear_reticulum_docs": "Cancella Documentazione Reticulum",
"clear_reticulum_docs_desc": "Rimuove tutta la documentazione e le versioni di Reticulum scaricate.",
+ "clear_path_table": "Svuota tabella percorsi",
+ "clear_path_table_desc": "Elimina tutti i percorsi di trasporto Reticulum memorizzati. I percorsi verranno riscoperti quando necessario.",
+ "path_table_cleared": "Tabella percorsi svuotata",
"export_messages": "Esporta Messaggi",
"export_messages_desc": "Scarica tutte le conversazioni come file JSON.",
"import_messages": "Importa Messaggi",
diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index d9c3f10f..03e5d2a4 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -642,6 +642,9 @@
"clear_archives_desc": "Verwijder alle gecachede NomadNetwork pagina's.",
"clear_reticulum_docs": "Reticulum Docs wissen",
"clear_reticulum_docs_desc": "Verwijdert alle gedownloade Reticulum documentatie en versies.",
+ "clear_path_table": "Padtabel wissen",
+ "clear_path_table_desc": "Verwijdert alle gecachte Reticulum-transportpaden. Routes worden opnieuw ontdekt wanneer nodig.",
+ "path_table_cleared": "Padtabel gewist",
"export_messages": "Berichten exporteren",
"export_messages_desc": "Alle gesprekken downloaden als een JSON-bestand.",
"import_messages": "Berichten importeren",
diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index c1432e7d..eba503fd 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -642,6 +642,9 @@
"clear_archives_desc": "Удалить все кэшированные страницы NomadNetwork.",
"clear_reticulum_docs": "Очистить документацию Reticulum",
"clear_reticulum_docs_desc": "Удаляет всю загруженную документацию и версии Reticulum.",
+ "clear_path_table": "Очистить таблицу путей",
+ "clear_path_table_desc": "Удаляет все кэшированные транспортные пути Reticulum. Маршруты будут обнаружены заново по мере необходимости.",
+ "path_table_cleared": "Таблица путей очищена",
"export_messages": "Экспортировать сообщения",
"export_messages_desc": "Загрузить все разговоры в виде JSON-файла.",
"import_messages": "Импортировать сообщения",
diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index ed78534b..e072fbb4 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -642,6 +642,9 @@
"clear_archives_desc": "删除所有已缓存的 Nomad Network 页面。",
"clear_reticulum_docs": "清除 Reticulum 文档",
"clear_reticulum_docs_desc": "删除所有已下载的 Reticulum 文档和版本。",
+ "clear_path_table": "清除路径表",
+ "clear_path_table_desc": "删除所有缓存的 Reticulum 传输路径。需要时将重新发现路由。",
+ "path_table_cleared": "路径表已清除",
"export_messages": "导出消息",
"export_messages_desc": "将所有对话下载为 JSON 文件。",
"import_messages": "导入消息",
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────